package com.song.tools.log.operatelog.service;

import com.alibaba.fastjson.JSONObject;
import com.song.tools.core.beans.UserInfo;
import com.song.tools.log.operatelog.aspect.OperateLogAspect;
import jakarta.annotation.PostConstruct;

/**
 * 操作日志处理器
 *
 * @author song tools
 * @since 2024-07-03
 */
public interface OperateLogProcessor {
    @PostConstruct
    default void init() {
        OperateLogAspect.addProcessor(this);
    }

    /**
     * 处理用户信息的特定操作。
     * <p>
     * 本函数旨在根据提供的用户信息、模板、模块、操作类型和操作ID，以及扩展信息JSONObject，执行特定的处理逻辑。
     * 这可能是用于记录用户行为、发送通知、更新用户状态等各种与用户操作相关的业务逻辑。
     *
     * @param userInfo   用户信息对象，包含有关执行操作的用户的信息。
     * @param template   模板标识，用于确定操作中使用的特定模板，例如邮件模板、通知模板等。
     * @param module     模块标识，指示操作所在的模块，用于定位具体业务逻辑。
     * @param actionType 操作类型，用于区分不同的操作，例如注册、登录、购买等。
     * @param actionId   操作ID，用于唯一标识特定的操作实例。
     * @param ext        扩展信息，以JSONObject形式提供的额外信息，用于支持操作中的特定需求。
     */
    void process(UserInfo userInfo, String template, String module, String actionType, String actionId, JSONObject ext);
}
